function wyjscie=uniknij_blokady(indeks_robota)


%tablica[wiersze,kolumny]

global mapa;
global roboty;
global lista;

skret=[0,0,0]; %oznacza brak mozliwosci skretu w prawo prosto i w lewo.

%zwraca pozycje w tablicy oznaczajaca w ktorym fragmencie wyliczonej drogi
%jestesmy. Potrzebne do pobrania ze sciezki kilku nastepnych krokow.
wyjscie=0;

for (i=1:size(lista,1))
%[lista(i,1) lista(i,2)]
        if (lista(i,1)==roboty(indeks_robota).pozycja(1) & lista(i,2)==roboty(indeks_robota).pozycja(2)  )
            pozycja=i;
      end;

end;

%dla kierunku 1
if (roboty(indeks_robota).kierunek==1)
    %rezerwowanie pola dla odpowiednich skretow
    x1=roboty(indeks_robota).pozycja(1);
    x2=roboty(indeks_robota).pozycja(2);
    mozliwosc_skretu=wezel(indeks_robota,1,2,1,1);
    
    if (lista(pozycja,2)<lista(pozycja+3,2) & mozliwosc_skretu(1)==1 ) %chce jechac w prawo
        macierz_skretu=[x1-1 x2;x1-1 x2+1];
     wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
      
    if (lista(pozycja,2)==lista(pozycja+3,2) & mozliwosc_skretu(2)==1) %chce jechac prosto
        macierz_skretu=[x1-1 x2;x1-2 x2;x1-3 x2];
        wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
        
    end
      
    if (lista(pozycja,2)>lista(pozycja+3,2) & mozliwosc_skretu(3)==1) %chce jechac w lewo
        macierz_skretu=[x1-1 x2;x1-2 x2; x1-2 x2-1; x1-2 x2-2];
       wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
end

%dla kierunku 2
if (roboty(indeks_robota).kierunek==2)
    %rezerwowanie pola dla odpowiednich skretow
    x1=roboty(indeks_robota).pozycja(1);
    x2=roboty(indeks_robota).pozycja(2);
    mozliwosc_skretu=wezel(indeks_robota,2,1,-1,1);

    if (lista(pozycja,1)<lista(pozycja+3,1) & mozliwosc_skretu(1)==1) %chce jechac w prawo
        macierz_skretu=[x1 x2+1 ; x1+1 x2+1];
        wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
      
    if (lista(pozycja,1)==lista(pozycja+3,1) & mozliwosc_skretu(2)==1) %chce jechac prosto
        macierz_skretu=[x1 x2+1;x1 x2+2;x1 x2+3];
        wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
      
    if (lista(pozycja,1)>lista(pozycja+3,1) & mozliwosc_skretu(3)==1) %chce jechac w lewo
        macierz_skretu=[x1 x2+1;x1 x2+2; x1-1 x2+2; x1-2 x2+2];
        wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
end
          
%dla kierunku 3
if (roboty(indeks_robota).kierunek==3)
    %rezerwowanie pola dla odpowiednich skretow
    x1=roboty(indeks_robota).pozycja(1);
    x2=roboty(indeks_robota).pozycja(2);
    mozliwosc_skretu=wezel(indeks_robota,1,2,-1,-1);

    
    if (lista(pozycja,2) > lista(pozycja+3,2) & mozliwosc_skretu(1)==1)  %chce jechac w prawo
        macierz_skretu=[x1+1 x2;x1+1 x2-1];
        wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
      
    if (lista(pozycja,2) == lista(pozycja+3,2) & mozliwosc_skretu(2)==1) %chce jechac prosto
        macierz_skretu=[x1+1 x2;x1+2 x2;x1+3 x2];
        wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
      
    if (lista(pozycja,2) < lista(pozycja+3,2) & mozliwosc_skretu(3)==1) %chce jechac w lewo
        macierz_skretu=[x1+1 x2;x1+2 x2; x1+2 x2+1; x1+2 x2+2];
        wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
end

%dla kierunku 4
if (roboty(indeks_robota).kierunek==4)
    %rezerwowanie pola dla odpowiednich skretow
    x1=roboty(indeks_robota).pozycja(1);
    x2=roboty(indeks_robota).pozycja(2);
    mozliwosc_skretu=wezel(indeks_robota,2,1,1,-1);

    if (lista(pozycja,1) > lista(pozycja+3,1) & mozliwosc_skretu(1)==1) %chce jechac w prawo
        macierz_skretu=[x1 x2-1 ; x1-1 x2-1];
        wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
      
    if (lista(pozycja,1)==lista(pozycja+3,1) & mozliwosc_skretu(2)==1) %chce jechac prosto
        macierz_skretu=[x1 x2-1;x1 x2-2;x1 x2-3];
        wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
      
    if (lista(pozycja,1)<lista(pozycja+3,1) & mozliwosc_skretu(3)==1) %chce jechac w lewo
        macierz_skretu=[x1 x2-1;x1 x2-2;  x1+1 x2-2; x1+2 x2-2];
        wyjscie=rezerwuj(1,indeks_robota,macierz_skretu);
    end
end


function skret=wezel(indeks_robota,x,y,a,b)
%funkcja sprawdza czy znajdujemy sie przed wezlem oraz w ktorych kierunkach
%istnieje mozliwosc skretu.

global mapa;
global roboty;

%tak dla przejzystosci kodu :)
x1=roboty(indeks_robota).pozycja(x);
x2=roboty(indeks_robota).pozycja(y);

skret=[0,0,0] ;%taka postac oznacza ze nie znajdujemy sie przed wezlem

 if(mapa(x1-a, x2+b)<1000 & mapa(x1-(2*a), x2+b)<1000 )
          skret(1)=1;
      end;
  
      if(mapa(x1-(3*a),x2)<1000 & mapa(x1-(3*a),x2-b)<1000 )
          skret(2)=1;
      end;
  
      if(mapa(x1-(2*a),x2-(2*b))<1000 & mapa(x1-a,x2-(2*b))<1000 )
          skret(3)=1;
      end;




  
